package ssm.service.Impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ssm.comfig.CacheKeyManager;
import ssm.model.entity.Video;
import ssm.model.entity.VideoBanner;
import ssm.mapper.VideoMapper;
import ssm.service.VideoService;
import ssm.utils.BaseCache;

import java.util.List;

@Service
public class VideoServiceImpl implements VideoService {

    @Autowired
    private VideoMapper videoMapper;

    @Autowired
    private BaseCache baseCache;

    @Override
    public List<Video> listVideo() {


        try {
            // 1、使用本地缓存,通过这个INDEX_BANNER_KEY
            // 2、去本地缓存找对应的数据，如果找到了，直接返回给 cacheObj 这个对象，如果没有找到，则去数据库里找，执行 videoMapper.listVideoBanner();
            // 3、将 cacheObj 这个对象强转为对应的数据，返回给controller
            Object cacheObj = baseCache.getTenMinuteCache().get(CacheKeyManager.INDEX_VIDEO_LIST_KEY, () -> {
                List<Video> VideoList = videoMapper.listVideo();
                return VideoList;
            });
            if (cacheObj instanceof List) {
                // 将 cacheObj 这个对象强转为对应的数据，返回给controller
                List<Video> VideoList = (List<Video>) cacheObj;
                // 返回给controller
                return VideoList;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;


    }

    @Override
    public List<VideoBanner> listBanner() {

        try {
            // 1、使用本地缓存,通过这个INDEX_BANNER_KEY
            // 2、去本地缓存找对应的数据，如果找到了，直接返回给 cacheObj 这个对象，如果没有找到，则去数据库里找，执行 videoMapper.listVideoBanner();
            // 3、将 cacheObj 这个对象强转为对应的数据，返回给controller
            Object cacheObj = baseCache.getTenMinuteCache().get(CacheKeyManager.INDEX_BANNER_KEY, () -> {
                List<VideoBanner> videoBanners = videoMapper.listVideoBanner();
                return videoBanners;
            });
            if (cacheObj instanceof List) {
                // 将 cacheObj 这个对象强转为对应的数据，返回给controller
                List<VideoBanner> videoBanners = (List<VideoBanner>) cacheObj;
                // 返回给controller
                return videoBanners;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public Video findDetailById(int videoId) {
        String videoCacheKey = String.format(CacheKeyManager.INDEX_VIDEO_DETAIL, videoId);

        try {
            Object cacheObj = baseCache.getOneHourCache().get(videoCacheKey, () -> {
                Video detailById = videoMapper.findDetailById(videoId);
                return detailById;
            });

            if (cacheObj instanceof Video) {
                // 将 cacheObj 这个对象强转为对应的数据，返回给controller
                Video video = (Video) cacheObj;
                // 返回给controller
                return video;
            }


        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;


    }
}
